/**
 * 
 */
package hb_Teach_InitObject05_27Exception;

import org.junit.Test;

/**
 * 异常的结构分为：Error和Exception
 * 异常的分类：
 * 检测异常：如果异常属于Exception的子类（除RunTimeException以外），称为检测异常。在编译时必须进行处理的异常。
 * 运行时异常：如果异常属于RunTimeException的子类，称为运行时异常。在编译时无需进行处理，在运行时执行。
 * 
 * 异常处理：1、throw
 *          2、try-catch-final
 *      
 * 自定义异常：
 *  1、定义一个类extends Exception或者RunTimeException
 *  2、为自定义的异常提供相关的构造器，目的是调用父类的构造器 alt+s快捷键
 * 常见检测异常:ParseException
 * 运行时异常：IndexOutOfBoundsExcption（数组越界）、NullPointerExcption（空指针异常）、IllegalArgumentExcption
 * 
 *  异常的处理方式：
 *  1、throws
 * 
 * throwable 抛出异常 
 * 常用方法：getMessage()
 * @author Jiang Zhiyan
 *
 * 2021年5月27日 上午11:29:30
 */
public class ExceptionTest {
   
	@Test
	public void testIdCard() throws Exception {
		String idCard = "43062120000291872A";
		try {
			checkId(idCard);
			System.out.println("身份证合法");
		}catch(Exception e){
			System.out.println(e.getMessage());
			System.out.println("【日志记录】：身份证格式不合法");
		    throw e; //抛出异常的实例
		}finally {
			System.out.println("finally 总是执行");
		}
	}
	  
	/*
	 * 检测身份证是否合法
	 */
	public void checkId(String idCard) throws Exception{
		String idCardRegx= "^\\d{17}[0-9xX]$";
		if(!idCard.matches(idCardRegx)) {
//			抛出一个异常的实例
			throw new Exception("身份证格式不合法1");  //向调用者抛出一个异常的实例
		}
	}
}
